-
Notifications
You must be signed in to change notification settings - Fork 593
HDDS-5869. Added support for stream on S3Gateway write path #4970
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
hi @szetszwo PTAL thanks. |
szetszwo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@guohao-rosicky , thanks a lot for working on this! Please see the comment inlined. Could you also add a test?
| byte[] buffer = new byte[bufferSize]; | ||
| ByteBuffer writeByteBuffer; | ||
| long total = 0; | ||
| do { | ||
| int realBufferSize = (int) (length - total); | ||
| if (realBufferSize > 0 && realBufferSize < bufferSize) { | ||
| buffer = new byte[realBufferSize]; | ||
| } | ||
| int nn = body.read(buffer); | ||
| if (nn == -1) { | ||
| break; | ||
| } else if (nn != bufferSize) { | ||
| byte[] subBuffer = new byte[nn]; | ||
| System.arraycopy(buffer, 0, subBuffer, 0, nn); | ||
| writeByteBuffer = ByteBuffer.wrap(subBuffer, 0, nn); | ||
| } else { | ||
| writeByteBuffer = ByteBuffer.wrap(buffer, 0, nn); | ||
| } | ||
| streamOutput.write(writeByteBuffer, 0, nn); | ||
| total += nn; | ||
| } while (total != length); | ||
| return total; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The method can be simplified to
final byte[] buffer = new byte[bufferSize];
long n = 0;
while (n < length) {
final int toRead = Math.toIntExact(Math.min(bufferSize, length - n));
final int readLength = body.read(buffer, 0, toRead);
if (readLength == -1) {
break;
}
streamOutput.write(ByteBuffer.wrap(buffer, 0, readLength));
n += readLength;
}
return n;| body = new SignedChunksInputStream(body); | ||
| } | ||
| long putLength = 0; | ||
| if (datastreamEnabled && !enableEC) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about we use Streaming only if it has more than one chunk?
if (datastreamEnabled && !enableEC && length > chunkSize) {There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @szetszwo review this.
I think it is ok, whether this is better to have a display configuration, and then this configuration can be decided by the user, if you think it is possible, I can add this configuration
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@guohao-rosicky , yes, it is a good idea. How about we reuse the OZONE_FS_DATASTREAM_AUTO_THRESHOLD conf?
ozone/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
Lines 117 to 118 in 01007af
| public static final String OZONE_FS_DATASTREAM_AUTO_THRESHOLD | |
| = "ozone.fs.datastream.auto.threshold"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sure.
szetszwo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1 the change looks good.
* master: HDDS-8555. [Snapshot] When snapshot feature is disabled, block OM startup if there are still snapshots in the system (apache#4994) HDDS-8782. Improve Volume Scanner Health checks. (apache#4867) HDDS-8447. Datanodes should not process container deletes for failed volumes. (apache#4901) HDDS-5869. Added support for stream on S3Gateway write path (apache#4970) HDDS-8859. [Snapshot] Return failure message to client for a failed snapshot diff jobs (apache#4993) HDDS-8939. [Snapshot] isBlockLocationSame check should be skipped if object is not OmKeyInfo. (apache#4991) HDDS-8923. Expose XceiverClient cache stats as metrics (apache#4979) HDDS-8913. ContainerManagerImpl: reduce processing while locked (apache#4967) HDDS-8935. [Snapshot] Fallback to full diff if getDetlaFiles from compaction DAG fails (apache#4986) HDDS-8911. Update Hadoop to 3.3.6 (apache#4985) HDDS-8931. Allow EC PipelineChoosingPolicy to be defined separately from Ratis (apache#4983) HDDS-8895. Support dynamic change of ozone.readonly.administrators in SCM (apache#4977) HDDS-6814. Make OM service ID optional for `ozone s3` commands if only one is defined in config (apache#4953) HDDS-8925. BaseFreonGenerator may not complete if last attempts fail (apache#4975) HDDS-7100. Container scanner incorrectly marks containers unhealthy when DN is shutdown (apache#4951) HDDS-8919. Allow EC pipelines to be created and then added to PipelineManager in two steps (apache#4968) HDDS-8901. Enable mTLS for InterSCMGrpcProtocol. (apache#4964) Conflicts: hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/interfaces/Container.java hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueContainer.java hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueContainerCheck.java hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/ContainerTestUtils.java
What changes were proposed in this pull request?
Added support for stream on S3Gateway write path
This section does not include multipart uploads.
ZERO copy is not used, and subsequent optimization is performed.
What is the link to the Apache JIRA
https://issues.apache.org/jira/browse/HDDS-5869
How was this patch tested?
Existing test
ci: https://github.com/guohao-rosicky/ozone/actions/runs/5364940200